It shows how to set software trigger of line scan cameras.
11 currentsystem = platform.system()
12 if currentsystem ==
'Windows':
13 sys.path.append(os.path.join(os.getenv(
'MVCAM_COMMON_RUNENV'),
"Samples",
"Python",
"MvImport"))
15 sys.path.append(os.path.join(
"..",
"..",
"MvImport"))
16 from MvCameraControl_class
import *
19 if sys.version_info[0] < 3:
21 input_func = raw_input
29 Safely decode a string from a ctypes character array. 30 Compatible with Python 2.x and 3.x, as well as 32-bit and 64-bit environments. 32 byte_str = memoryview(ctypes_char_array).tobytes()
35 null_index = byte_str.find(b
'\x00')
37 byte_str = byte_str[:null_index]
40 for encoding
in [
'gbk',
'utf-8',
'latin-1']:
42 return byte_str.decode(encoding)
43 except UnicodeDecodeError:
47 return byte_str.decode(
'latin-1', errors=
'replace')
53 stFrameInfo = POINTER(MV_FRAME_OUT_INFO_EX)
54 pData = POINTER(c_ubyte)
55 FrameInfoCallBack =
fun_ctype(
None, pData, stFrameInfo, c_void_p)
58 stFrameInfo = cast(pFrameInfo, POINTER(MV_FRAME_OUT_INFO_EX)).contents
60 print(
"get one frame: Width[%d], Height[%d], nFrameNum[%d]" % (stFrameInfo.nWidth, stFrameInfo.nHeight, stFrameInfo.nFrameNum))
69 res = cam.MV_CC_SetCommandValue(cmd_value)
71 print(
"set software trigger command fail[0x%x]" % res)
78 access_mode = MV_XML_AccessMode()
79 res = cam_ins.MV_XML_GetNodeAccessMode(node_name, access_mode)
82 if access_mode == AM_WO
or access_mode == AM_RO
or access_mode == AM_RW:
88 if __name__ ==
"__main__":
92 MvCamera.MV_CC_Initialize()
94 SDKVersion = MvCamera.MV_CC_GetSDKVersion()
95 print (
"SDKVersion[0x%x]" % SDKVersion)
97 deviceList = MV_CC_DEVICE_INFO_LIST()
98 tlayerType = (MV_GIGE_DEVICE | MV_USB_DEVICE | MV_GENTL_CAMERALINK_DEVICE
99 | MV_GENTL_CXP_DEVICE | MV_GENTL_XOF_DEVICE)
102 ret = MvCamera.MV_CC_EnumDevices(tlayerType, deviceList)
104 print(
"enum devices fail! ret[0x%x]" % ret)
107 if deviceList.nDeviceNum == 0:
108 print(
"find no device!")
111 print(
"Find %d devices!" % deviceList.nDeviceNum)
113 for i
in range(0, deviceList.nDeviceNum):
114 mvcc_dev_info = cast(deviceList.pDeviceInfo[i], POINTER(MV_CC_DEVICE_INFO)).contents
115 if mvcc_dev_info.nTLayerType == MV_GIGE_DEVICE
or mvcc_dev_info.nTLayerType == MV_GENTL_GIGE_DEVICE:
116 print (
"\ngige device: [%d]" % i)
117 strModeName =
decoding_char(mvcc_dev_info.SpecialInfo.stGigEInfo.chModelName)
118 print (
"device model name: %s" % strModeName)
119 strSerialNumber =
decoding_char(mvcc_dev_info.SpecialInfo.stGigEInfo.chSerialNumber)
120 print(
"device serial number: %s" % strSerialNumber)
121 nip1 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0xff000000) >> 24)
122 nip2 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x00ff0000) >> 16)
123 nip3 = ((mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x0000ff00) >> 8)
124 nip4 = (mvcc_dev_info.SpecialInfo.stGigEInfo.nCurrentIp & 0x000000ff)
125 print (
"current ip: %d.%d.%d.%d\n" % (nip1, nip2, nip3, nip4))
126 elif mvcc_dev_info.nTLayerType == MV_USB_DEVICE:
127 print (
"\nu3v device: [%d]" % i)
128 strModeName =
decoding_char(mvcc_dev_info.SpecialInfo.stUsb3VInfo.chModelName)
129 print (
"device model name: %s" % strModeName)
131 strSerialNumber =
decoding_char(mvcc_dev_info.SpecialInfo.stUsb3VInfo.chSerialNumber)
132 print (
"device serial number: %s" % strSerialNumber)
133 elif mvcc_dev_info.nTLayerType == MV_GENTL_CAMERALINK_DEVICE:
134 print (
"\nCML device: [%d]" % i)
135 strModeName =
decoding_char(mvcc_dev_info.SpecialInfo.stCMLInfo.chModelName)
136 print (
"device model name: %s" % strModeName)
138 strSerialNumber =
decoding_char(mvcc_dev_info.SpecialInfo.stCMLInfo.chSerialNumber)
139 print (
"device serial number: %s" % strSerialNumber)
140 elif mvcc_dev_info.nTLayerType == MV_GENTL_CXP_DEVICE:
141 print (
"\nCXP device: [%d]" % i)
142 strModeName =
decoding_char(mvcc_dev_info.SpecialInfo.stCXPInfo.chModelName)
143 print (
"device model name: %s" % strModeName)
145 strSerialNumber =
decoding_char(mvcc_dev_info.SpecialInfo.stCXPInfo.chSerialNumber)
146 print (
"device serial number: %s" % strSerialNumber)
147 elif mvcc_dev_info.nTLayerType == MV_GENTL_XOF_DEVICE:
148 print (
"\nXoF device: [%d]" % i)
149 strModeName =
decoding_char(mvcc_dev_info.SpecialInfo.stXoFInfo.chModelName)
150 print (
"device model name: %s" % strModeName)
152 strSerialNumber =
decoding_char(mvcc_dev_info.SpecialInfo.stXoFInfo.chSerialNumber)
153 print (
"device serial number: %s" % strSerialNumber)
155 nConnectionNum =
input_func(
"please input the number of the device to connect:")
157 if int(nConnectionNum) >= deviceList.nDeviceNum:
158 print(
"input error!")
165 stDeviceList = cast(deviceList.pDeviceInfo[int(nConnectionNum)], POINTER(MV_CC_DEVICE_INFO)).contents
167 ret = cam.MV_CC_CreateHandle(stDeviceList)
169 raise Exception(
"create handle fail! ret[0x%x]" % ret)
172 ret = cam.MV_CC_OpenDevice(MV_ACCESS_Exclusive, 0)
174 raise Exception(
"open device fail! ret[0x%x]" % ret)
177 if stDeviceList.nTLayerType == MV_GIGE_DEVICE
or stDeviceList.nTLayerType == MV_GENTL_GIGE_DEVICE:
178 nPacketSize = cam.MV_CC_GetOptimalPacketSize()
179 if int(nPacketSize) > 0:
180 ret = cam.MV_CC_SetIntValue(
"GevSCPSPacketSize", nPacketSize)
182 print(
"Warning: Set Packet Size fail! ret[0x%x]" % ret)
184 print(
"Warning: Get Packet Size fail! ret[0x%x]" % nPacketSize)
187 ret = cam.MV_CC_SetEnumValueByString(
"ScanMode",
"FrameScan")
189 print(
"set frame scan mode")
194 ret = cam.MV_CC_SetBoolValue(
"FrameTriggerMode",
True)
196 raise Exception(
"set frame trigger mode on fail! ret[0x%x]" % ret)
198 ret = cam.MV_CC_SetEnumValueByString(
"FrameTriggerSource",
"Software")
200 raise Exception(
"set trigger source Software fail! ret[0x%x]" % ret)
202 trigger_cmd =
"FrameTriggerSoftware" 205 ret = cam.MV_CC_SetEnumValue(
"TriggerSelector", 6)
207 raise Exception(
"set trigger selector fail! ret[0x%x]" % ret)
210 ret = cam.MV_CC_SetEnumValue(
"TriggerMode", 1)
212 raise Exception(
"set trigger mode fail! ret[0x%x]" % ret)
215 ret = cam.MV_CC_SetEnumValueByString(
"TriggerSource",
"Software")
217 raise Exception(
"set trigger source fail! ret[0x%x]" % ret)
219 trigger_cmd =
"TriggerSoftware" 222 ret = cam.MV_CC_RegisterImageCallBackEx(CALL_BACK_FUN,
None)
224 raise Exception(
"register image callback fail! ret[0x%x]" % ret)
227 ret = cam.MV_CC_StartGrabbing()
229 raise Exception(
"start grabbing fail! ret[0x%x]" % ret)
232 hThreadHandle = threading.Thread(target=software_trigger_thread, args=(cam, trigger_cmd))
233 hThreadHandle.start()
235 print(
"error: unable to start thread")
237 print (
"press Enter key to stop grabbing.")
244 ret = cam.MV_CC_StopGrabbing()
246 raise Exception(
"stop grabbing fail! ret[0x%x]" % ret)
249 ret = cam.MV_CC_CloseDevice()
251 raise Exception(
"close device fail! ret[0x%x]" % ret)
254 cam.MV_CC_DestroyHandle()
256 except Exception
as e:
258 cam.MV_CC_CloseDevice()
259 cam.MV_CC_DestroyHandle()
262 MvCamera.MV_CC_Finalize()